<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/math64.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/math64.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX01BVEg2NF9IXzA_"><span class="b">_LINUX_MATH64_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX01BVEg2NF9IXzA_"><span class="b">_LINUX_MATH64_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> 
<a name="4" /><span class="Maybe">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="Maybe">       5:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">div64</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="6" /><span class="Maybe">       6:</span> 
<a name="7" /><span class="Maybe">       7:</span> <span class="f">#</span><span class="n">if</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a> <span class="f">==</span> <span class="c">64</span>
<a name="8" /><span class="Maybe">       8:</span> 
<a name="9" /><span class="Maybe">       9:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_ZGl2NjRfbG9uZ18w"><span class="b">div64_long</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">y</span><span class="f">)</span> <span class="b">div64_s64</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">y</span><span class="f">)</span><span class="f">)</span>
<a name="10" /><span class="Maybe">      10:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_ZGl2NjRfdWxfMA__"><span class="b">div64_ul</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">y</span><span class="f">)</span>   <span class="b">div64_u64</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">y</span><span class="f">)</span><span class="f">)</span>
<a name="11" /><span class="Maybe">      11:</span> 
<a name="12" /><span class="Maybe">      12:</span> <span class="k">/**</span>
<a name="13" /><span class="Maybe">      13:</span> <span class="k"> * div_u64_rem - unsigned 64bit divide with 32bit divisor with remainder</span>
<a name="14" /><span class="Maybe">      14:</span> <span class="k"> *</span>
<a name="15" /><span class="Maybe">      15:</span> <span class="k"> * This is commonly provided by 32bit archs to provide an optimized 64bit</span>
<a name="16" /><span class="Maybe">      16:</span> <span class="k"> * divide.</span>
<a name="17" /><span class="Maybe">      17:</span> <span class="k"> */</span>
<a name="18" /><span class="Maybe">      18:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">u64</span> <span class="b">div_u64_rem</span><span class="f">(</span><span class="b">u64</span> <span class="b">dividend</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">divisor</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="f">*</span><span class="b">remainder</span><span class="f">)</span>
<a name="19" /><span class="Maybe">      19:</span> <span class="f">{</span>
<a name="20" /><span class="Maybe">      20:</span>     <span class="f">*</span><span class="b">remainder</span> <span class="f">=</span> <span class="b">dividend</span> <span class="f">%</span> <span class="b">divisor</span><span class="f">;</span>
<a name="21" /><span class="Maybe">      21:</span>     <span class="m">return</span> <span class="b">dividend</span> <span class="f">/</span> <span class="b">divisor</span><span class="f">;</span>
<a name="22" /><span class="Maybe">      22:</span> <span class="f">}</span>
<a name="23" /><span class="Maybe">      23:</span> 
<a name="24" /><span class="Maybe">      24:</span> <span class="k">/**</span>
<a name="25" /><span class="Maybe">      25:</span> <span class="k"> * div_s64_rem - signed 64bit divide with 32bit divisor with remainder</span>
<a name="26" /><span class="Maybe">      26:</span> <span class="k"> */</span>
<a name="27" /><span class="Maybe">      27:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">s64</span> <span class="b">div_s64_rem</span><span class="f">(</span><span class="b">s64</span> <span class="b">dividend</span><span class="f">,</span> <span class="b">s32</span> <span class="b">divisor</span><span class="f">,</span> <span class="b">s32</span> <span class="f">*</span><span class="b">remainder</span><span class="f">)</span>
<a name="28" /><span class="Maybe">      28:</span> <span class="f">{</span>
<a name="29" /><span class="Maybe">      29:</span>     <span class="f">*</span><span class="b">remainder</span> <span class="f">=</span> <span class="b">dividend</span> <span class="f">%</span> <span class="b">divisor</span><span class="f">;</span>
<a name="30" /><span class="Maybe">      30:</span>     <span class="m">return</span> <span class="b">dividend</span> <span class="f">/</span> <span class="b">divisor</span><span class="f">;</span>
<a name="31" /><span class="Maybe">      31:</span> <span class="f">}</span>
<a name="32" /><span class="Maybe">      32:</span> 
<a name="33" /><span class="Maybe">      33:</span> <span class="k">/**</span>
<a name="34" /><span class="Maybe">      34:</span> <span class="k"> * div64_u64_rem - unsigned 64bit divide with 64bit divisor and remainder</span>
<a name="35" /><span class="Maybe">      35:</span> <span class="k"> */</span>
<a name="36" /><span class="Maybe">      36:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">u64</span> <span class="b">div64_u64_rem</span><span class="f">(</span><span class="b">u64</span> <span class="b">dividend</span><span class="f">,</span> <span class="b">u64</span> <span class="b">divisor</span><span class="f">,</span> <span class="b">u64</span> <span class="f">*</span><span class="b">remainder</span><span class="f">)</span>
<a name="37" /><span class="Maybe">      37:</span> <span class="f">{</span>
<a name="38" /><span class="Maybe">      38:</span>     <span class="f">*</span><span class="b">remainder</span> <span class="f">=</span> <span class="b">dividend</span> <span class="f">%</span> <span class="b">divisor</span><span class="f">;</span>
<a name="39" /><span class="Maybe">      39:</span>     <span class="m">return</span> <span class="b">dividend</span> <span class="f">/</span> <span class="b">divisor</span><span class="f">;</span>
<a name="40" /><span class="Maybe">      40:</span> <span class="f">}</span>
<a name="41" /><span class="Maybe">      41:</span> 
<a name="42" /><span class="Maybe">      42:</span> <span class="k">/**</span>
<a name="43" /><span class="Maybe">      43:</span> <span class="k"> * div64_u64 - unsigned 64bit divide with 64bit divisor</span>
<a name="44" /><span class="Maybe">      44:</span> <span class="k"> */</span>
<a name="45" /><span class="Maybe">      45:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">u64</span> <span class="b">div64_u64</span><span class="f">(</span><span class="b">u64</span> <span class="b">dividend</span><span class="f">,</span> <span class="b">u64</span> <span class="b">divisor</span><span class="f">)</span>
<a name="46" /><span class="Maybe">      46:</span> <span class="f">{</span>
<a name="47" /><span class="Maybe">      47:</span>     <span class="m">return</span> <span class="b">dividend</span> <span class="f">/</span> <span class="b">divisor</span><span class="f">;</span>
<a name="48" /><span class="Maybe">      48:</span> <span class="f">}</span>
<a name="49" /><span class="Maybe">      49:</span> 
<a name="50" /><span class="Maybe">      50:</span> <span class="k">/**</span>
<a name="51" /><span class="Maybe">      51:</span> <span class="k"> * div64_s64 - signed 64bit divide with 64bit divisor</span>
<a name="52" /><span class="Maybe">      52:</span> <span class="k"> */</span>
<a name="53" /><span class="Maybe">      53:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">s64</span> <span class="b">div64_s64</span><span class="f">(</span><span class="b">s64</span> <span class="b">dividend</span><span class="f">,</span> <span class="b">s64</span> <span class="b">divisor</span><span class="f">)</span>
<a name="54" /><span class="Maybe">      54:</span> <span class="f">{</span>
<a name="55" /><span class="Maybe">      55:</span>     <span class="m">return</span> <span class="b">dividend</span> <span class="f">/</span> <span class="b">divisor</span><span class="f">;</span>
<a name="56" /><span class="Maybe">      56:</span> <span class="f">}</span>
<a name="57" /><span class="Maybe">      57:</span> 
<a name="58" /><span class="False">      58:</span> <span class="f">#</span><span class="n">elif</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a> <span class="f">==</span> <span class="c">32</span>
<a name="59" /><span class="False">      59:</span> 
<a name="60" /><span class="False">      60:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_ZGl2NjRfbG9uZ18w"><span class="b">div64_long</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">y</span><span class="f">)</span> <span class="b">div_s64</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">y</span><span class="f">)</span><span class="f">)</span>
<a name="61" /><span class="False">      61:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_ZGl2NjRfdWxfMA__"><span class="b">div64_ul</span></a><span class="f">(</span><span class="b">x</span><span class="f">,</span> <span class="b">y</span><span class="f">)</span>   <span class="b">div_u64</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">y</span><span class="f">)</span><span class="f">)</span>
<a name="62" /><span class="False">      62:</span> 
<a name="63" /><span class="False">      63:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">div_u64_rem</span>
<a name="64" /><span class="False">      64:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">u64</span> <span class="b">div_u64_rem</span><span class="f">(</span><span class="b">u64</span> <span class="b">dividend</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">divisor</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="f">*</span><span class="b">remainder</span><span class="f">)</span>
<a name="65" /><span class="False">      65:</span> <span class="f">{</span>
<a name="66" /><span class="False">      66:</span>     <span class="f">*</span><span class="b">remainder</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_ZG9fZGl2XzA_"><span class="b">do_div</span></a><span class="f">(</span><span class="b">dividend</span><span class="f">,</span> <span class="b">divisor</span><span class="f">)</span><span class="f">;</span>
<a name="67" /><span class="False">      67:</span>     <span class="m">return</span> <span class="b">dividend</span><span class="f">;</span>
<a name="68" /><span class="False">      68:</span> <span class="f">}</span>
<a name="69" /><span class="False">      69:</span> <span class="f">#</span><span class="n">endif</span>
<a name="70" /><span class="False">      70:</span> 
<a name="71" /><span class="False">      71:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">div_s64_rem</span>
<a name="72" /><span class="False">      72:</span> <span class="m">extern</span> <span class="b">s64</span> <span class="b">div_s64_rem</span><span class="f">(</span><span class="b">s64</span> <span class="b">dividend</span><span class="f">,</span> <span class="b">s32</span> <span class="b">divisor</span><span class="f">,</span> <span class="b">s32</span> <span class="f">*</span><span class="b">remainder</span><span class="f">)</span><span class="f">;</span>
<a name="73" /><span class="False">      73:</span> <span class="f">#</span><span class="n">endif</span>
<a name="74" /><span class="False">      74:</span> 
<a name="75" /><span class="False">      75:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">div64_u64_rem</span>
<a name="76" /><span class="False">      76:</span> <span class="m">extern</span> <span class="b">u64</span> <span class="b">div64_u64_rem</span><span class="f">(</span><span class="b">u64</span> <span class="b">dividend</span><span class="f">,</span> <span class="b">u64</span> <span class="b">divisor</span><span class="f">,</span> <span class="b">u64</span> <span class="f">*</span><span class="b">remainder</span><span class="f">)</span><span class="f">;</span>
<a name="77" /><span class="False">      77:</span> <span class="f">#</span><span class="n">endif</span>
<a name="78" /><span class="False">      78:</span> 
<a name="79" /><span class="False">      79:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">div64_u64</span>
<a name="80" /><span class="False">      80:</span> <span class="m">extern</span> <span class="b">u64</span> <span class="b">div64_u64</span><span class="f">(</span><span class="b">u64</span> <span class="b">dividend</span><span class="f">,</span> <span class="b">u64</span> <span class="b">divisor</span><span class="f">)</span><span class="f">;</span>
<a name="81" /><span class="False">      81:</span> <span class="f">#</span><span class="n">endif</span>
<a name="82" /><span class="False">      82:</span> 
<a name="83" /><span class="False">      83:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">div64_s64</span>
<a name="84" /><span class="False">      84:</span> <span class="m">extern</span> <span class="b">s64</span> <span class="b">div64_s64</span><span class="f">(</span><span class="b">s64</span> <span class="b">dividend</span><span class="f">,</span> <span class="b">s64</span> <span class="b">divisor</span><span class="f">)</span><span class="f">;</span>
<a name="85" /><span class="False">      85:</span> <span class="f">#</span><span class="n">endif</span>
<a name="86" /><span class="False">      86:</span> 
<a name="87" /><span class="Maybe">      87:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* BITS_PER_LONG */</span>
<a name="88" /><span class="Maybe">      88:</span> 
<a name="89" /><span class="Maybe">      89:</span> <span class="k">/**</span>
<a name="90" /><span class="Maybe">      90:</span> <span class="k"> * div_u64 - unsigned 64bit divide with 32bit divisor</span>
<a name="91" /><span class="Maybe">      91:</span> <span class="k"> *</span>
<a name="92" /><span class="Maybe">      92:</span> <span class="k"> * This is the most common 64bit divide and should be used if possible,</span>
<a name="93" /><span class="Maybe">      93:</span> <span class="k"> * as many 32bit archs can optimize this variant better than a full 64bit</span>
<a name="94" /><span class="Maybe">      94:</span> <span class="k"> * divide.</span>
<a name="95" /><span class="Maybe">      95:</span> <span class="k"> */</span>
<a name="96" /><span class="Maybe">      96:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">div_u64</span>
<a name="97" /><span class="Maybe">      97:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">u64</span> <span class="b">div_u64</span><span class="f">(</span><span class="b">u64</span> <span class="b">dividend</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">divisor</span><span class="f">)</span>
<a name="98" /><span class="Maybe">      98:</span> <span class="f">{</span>
<a name="99" /><span class="Maybe">      99:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">remainder</span><span class="f">;</span>
<a name="100" /><span class="Maybe">     100:</span>     <span class="m">return</span> <span class="b">div_u64_rem</span><span class="f">(</span><span class="b">dividend</span><span class="f">,</span> <span class="b">divisor</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">remainder</span><span class="f">)</span><span class="f">;</span>
<a name="101" /><span class="Maybe">     101:</span> <span class="f">}</span>
<a name="102" /><span class="Maybe">     102:</span> <span class="f">#</span><span class="n">endif</span>
<a name="103" /><span class="Maybe">     103:</span> 
<a name="104" /><span class="Maybe">     104:</span> <span class="k">/**</span>
<a name="105" /><span class="Maybe">     105:</span> <span class="k"> * div_s64 - signed 64bit divide with 32bit divisor</span>
<a name="106" /><span class="Maybe">     106:</span> <span class="k"> */</span>
<a name="107" /><span class="Maybe">     107:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">div_s64</span>
<a name="108" /><span class="Maybe">     108:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">s64</span> <span class="b">div_s64</span><span class="f">(</span><span class="b">s64</span> <span class="b">dividend</span><span class="f">,</span> <span class="b">s32</span> <span class="b">divisor</span><span class="f">)</span>
<a name="109" /><span class="Maybe">     109:</span> <span class="f">{</span>
<a name="110" /><span class="Maybe">     110:</span>     <span class="b">s32</span> <span class="b">remainder</span><span class="f">;</span>
<a name="111" /><span class="Maybe">     111:</span>     <span class="m">return</span> <span class="b">div_s64_rem</span><span class="f">(</span><span class="b">dividend</span><span class="f">,</span> <span class="b">divisor</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">remainder</span><span class="f">)</span><span class="f">;</span>
<a name="112" /><span class="Maybe">     112:</span> <span class="f">}</span>
<a name="113" /><span class="Maybe">     113:</span> <span class="f">#</span><span class="n">endif</span>
<a name="114" /><span class="Maybe">     114:</span> 
<a name="115" /><span class="Maybe">     115:</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">iter_div_u64_rem</span><span class="f">(</span><span class="b">u64</span> <span class="b">dividend</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">divisor</span><span class="f">,</span> <span class="b">u64</span> <span class="f">*</span><span class="b">remainder</span><span class="f">)</span><span class="f">;</span>
<a name="116" /><span class="Maybe">     116:</span> 
<a name="117" /><span class="Maybe">     117:</span> <span class="m">static</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfaW5saW5lXzA_"><span class="b">__always_inline</span></a> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a>
<a name="118" /><span class="Maybe">     118:</span> <span class="b">__iter_div_u64_rem</span><span class="f">(</span><span class="b">u64</span> <span class="b">dividend</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">divisor</span><span class="f">,</span> <span class="b">u64</span> <span class="f">*</span><span class="b">remainder</span><span class="f">)</span>
<a name="119" /><span class="Maybe">     119:</span> <span class="f">{</span>
<a name="120" /><span class="Maybe">     120:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>
<a name="121" /><span class="Maybe">     121:</span> 
<a name="122" /><span class="Maybe">     122:</span>     <span class="m">while</span> <span class="f">(</span><span class="b">dividend</span> <span class="f">&gt;=</span> <span class="b">divisor</span><span class="f">)</span> <span class="f">{</span>
<a name="123" /><span class="Maybe">     123:</span>         <span class="k">/* The following asm() prevents the compiler from</span>
<a name="124" /><span class="Maybe">     124:</span> <span class="k">           optimising this loop into a modulo operation.  */</span>
<a name="125" /><span class="Maybe">     125:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;&quot;</span> <span class="f">:</span> <span class="e">&quot;+rm&quot;</span><span class="f">(</span><span class="b">dividend</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="126" /><span class="Maybe">     126:</span> 
<a name="127" /><span class="Maybe">     127:</span>         <span class="b">dividend</span> <span class="f">-=</span> <span class="b">divisor</span><span class="f">;</span>
<a name="128" /><span class="Maybe">     128:</span>         <span class="b">ret</span><span class="f">++</span><span class="f">;</span>
<a name="129" /><span class="Maybe">     129:</span>     <span class="f">}</span>
<a name="130" /><span class="Maybe">     130:</span> 
<a name="131" /><span class="Maybe">     131:</span>     <span class="f">*</span><span class="b">remainder</span> <span class="f">=</span> <span class="b">dividend</span><span class="f">;</span>
<a name="132" /><span class="Maybe">     132:</span> 
<a name="133" /><span class="Maybe">     133:</span>     <span class="m">return</span> <span class="b">ret</span><span class="f">;</span>
<a name="134" /><span class="Maybe">     134:</span> <span class="f">}</span>
<a name="135" /><span class="Maybe">     135:</span> 
<a name="136" /><span class="False">     136:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q09ORklHX0FSQ0hfU1VQUE9SVFNfSU5UMTI4XzA_"><span class="b">CONFIG_ARCH_SUPPORTS_INT128</span></a><span class="f">)</span> <span class="f">&amp;&amp;</span> <span class="b">defined</span><span class="f">(</span><span class="b">__SIZEOF_INT128__</span><span class="f">)</span>
<a name="137" /><span class="False">     137:</span> 
<a name="138" /><span class="False">     138:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">mul_u64_u32_shr</span>
<a name="139" /><span class="False">     139:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">u64</span> <span class="b">mul_u64_u32_shr</span><span class="f">(</span><span class="b">u64</span> <span class="b">a</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">mul</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">shift</span><span class="f">)</span>
<a name="140" /><span class="False">     140:</span> <span class="f">{</span>
<a name="141" /><span class="False">     141:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">u64</span><span class="f">)</span><span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="b">__int128</span><span class="f">)</span><span class="b">a</span> <span class="f">*</span> <span class="b">mul</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <span class="b">shift</span><span class="f">)</span><span class="f">;</span>
<a name="142" /><span class="False">     142:</span> <span class="f">}</span>
<a name="143" /><span class="False">     143:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* mul_u64_u32_shr */</span>
<a name="144" /><span class="False">     144:</span> 
<a name="145" /><span class="Maybe">     145:</span> <span class="f">#</span><span class="n">else</span>
<a name="146" /><span class="Maybe">     146:</span> 
<a name="147" /><span class="Maybe">     147:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">mul_u64_u32_shr</span>
<a name="148" /><span class="Maybe">     148:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">u64</span> <span class="b">mul_u64_u32_shr</span><span class="f">(</span><span class="b">u64</span> <span class="b">a</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">mul</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">shift</span><span class="f">)</span>
<a name="149" /><span class="Maybe">     149:</span> <span class="f">{</span>
<a name="150" /><span class="Maybe">     150:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">ah</span><span class="f">,</span> <span class="b">al</span><span class="f">;</span>
<a name="151" /><span class="Maybe">     151:</span>     <span class="b">u64</span> <span class="b">ret</span><span class="f">;</span>
<a name="152" /><span class="Maybe">     152:</span> 
<a name="153" /><span class="Maybe">     153:</span>     <span class="b">al</span> <span class="f">=</span> <span class="b">a</span><span class="f">;</span>
<a name="154" /><span class="Maybe">     154:</span>     <span class="b">ah</span> <span class="f">=</span> <span class="b">a</span> <span class="f">&gt;&gt;</span> <span class="c">32</span><span class="f">;</span>
<a name="155" /><span class="Maybe">     155:</span> 
<a name="156" /><span class="Maybe">     156:</span>     <span class="b">ret</span> <span class="f">=</span> <span class="f">(</span><span class="f">(</span><span class="b">u64</span><span class="f">)</span><span class="b">al</span> <span class="f">*</span> <span class="b">mul</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <span class="b">shift</span><span class="f">;</span>
<a name="157" /><span class="Maybe">     157:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">ah</span><span class="f">)</span>
<a name="158" /><span class="Maybe">     158:</span>         <span class="b">ret</span> <span class="f">+=</span> <span class="f">(</span><span class="f">(</span><span class="b">u64</span><span class="f">)</span><span class="b">ah</span> <span class="f">*</span> <span class="b">mul</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <span class="f">(</span><span class="c">32</span> <span class="f">-</span> <span class="b">shift</span><span class="f">)</span><span class="f">;</span>
<a name="159" /><span class="Maybe">     159:</span> 
<a name="160" /><span class="Maybe">     160:</span>     <span class="m">return</span> <span class="b">ret</span><span class="f">;</span>
<a name="161" /><span class="Maybe">     161:</span> <span class="f">}</span>
<a name="162" /><span class="Maybe">     162:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* mul_u64_u32_shr */</span>
<a name="163" /><span class="Maybe">     163:</span> 
<a name="164" /><span class="Maybe">     164:</span> <span class="f">#</span><span class="n">endif</span>
<a name="165" /><span class="Maybe">     165:</span> 
<a name="166" /><span class="True">     166:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_MATH64_H */</span>
<a name="167" /><span class="True">     167:</span> </pre>
  </body>
</html>
